#!/usr/bin/perl

use Errno qw (EACCES ENOENT);
my $result = open (FH, ">/etc/password");
if(!$result){
    if($! == EACCES){
        warn "you do not have permission to open this file.";
    }elsif($! == ENOENT){
        warn "file or directory not found.";
    }else{
        warn "some other error occurred: $!";
    }
}


# 作为一个原则，每个执行I/O的perl函数失败时便返回一个错误值undef。
# 更详细的信息可以通过检查特定的全局变量 $! 获得。
# $! 具有双重本质：
#   1. 作为字符串，他将返回可读的错误信息。
#   2. 返回错误的数值常量。

# use语句中，可以使用名字来导入单个常量，或者一次性全部导入。
# qw 运算符用于将文本串分开为字的列表。
# 上面等价于  use Errno ('EACCES', 'ENOENT');
# 引入 EACCES 和 ENOENT 时比较使用数值型“==”

# 引入所有通用的错误常量，导入标志：POSIX。浙江导入由POSIX标准定义的错误常量
# use Error qw(: POSIX);

# $!的值只在一个函数指明失败时才可靠！ 当一个函数执行后无论成功还是失败都会把设置 $!。 